import { Modal, Spin } from 'antd'

/**
 * 统计有多少个loading请求
 */
const loadingCount = (function () {
  let count = 0
  return {
    add() {
      count += 1
    },
    reduce() {
      count && (count -= 1)
    },
    isZero() {
      return count === 0
    },
  }
})()

let spinModal

/**
 * 展示全局Loading
 * @param {*} config 提示内容
 */
export function showLoading(config) {
  // 请求数+1
  loadingCount.add()
  const content = {
    className: 'spin',
    content: <Spin tip={config?.text ?? '加载中...'} />,
  }
  // 显示loading
  if (!spinModal) {
    spinModal = Modal.info(content)
  } else {
    spinModal.update(content)
  }
}

/**
 * 取消全局loading
 */
export function hideLoading() {
  loadingCount.reduce()
  // 所有使用了全局loading的请求完成后才消失
  if (loadingCount.isZero) {
    // 避免网速太快造成闪屏，这里延迟200ms后才销毁
    setTimeout(() => {
      // 为了避免200ms内有新的loading, 仍然需要再次判断
      if (loadingCount.isZero) {
        spinModal.destroy()
      }
    }, 200)
  }
}

/**
 * 重新登陆确认弹层
 */
export function reLogged() {
  Modal.confirm({
    className: 'tips re-logged',
    title: '系统消息',
    content: '您还未登陆或登陆已过期，点击确认后重新登陆',
    onOk() {
      window.location.href = `/login?redirect=${window.location.pathname}`
    },
    okText: '确认',
  })
}

/**
 * ajax请求错误提示弹层
 * @param {*} message
 */
export function ajaxError(message) {
  Modal.warn({
    className: 'tips ajax-error',
    title: '系统消息',
    content: message.map((item, index) => <div key={index}>{item}</div>),
  })
}

export function Warn(content) {
  Modal.warn({
    className: 'tips component-warn',
    title: '系统消息',
    content: content.map((item, index) => <div key={index}>{item}</div>),
  })
}
